import { Injectable } from '@nestjs/common';
import { CreateTokenDto } from './dto/create-token.dto';
import { UpdateTokenDto } from './dto/update-token.dto';
import { InjectRepository } from '@nestjs/typeorm';
import { Token } from './entities/token.entity';
import { Repository } from 'typeorm';

@Injectable()
export class TokensService {
  constructor(
    @InjectRepository(Token)
    private readonly tokenRepository: Repository<Token>,
  ) {}

  create(createTokenDto: CreateTokenDto) {
    return 'This action adds a new token';
  }

  findAll() {
    return this.tokenRepository.find();
  }

  findOne(id: number) {
    return `This action returns a #${id} token`;
  }

  update(updateTokenDto: UpdateTokenDto) {
    return `This action updates a token`;
  }

  remove(id: number) {
    return `This action removes a #${id} token`;
  }

  /**
   * 获取token
   * @param userId 用户uuid
   * @returns
   */
  async getToken(userId: string) {
    // 查询用户token
    const userToken = await this.tokenRepository
      .createQueryBuilder('token')
      .where('token.user_id = :userId', { userId })
      .getOne();
    if (userToken) {
      // 如果存在，就返回token
      return userToken.token;
    }
    // 如果不存在，就返回 null
    return null;
  }

  /**
   * 登录的时候 保存token
   * @param userId 用户uuid
   * @param token token
   * @returns
   */
  async setToken(userId: string, token: string) {
    // 先查询用户token
    const userToken = await this.tokenRepository
      .createQueryBuilder('token')
      .where('token.user_id = :userId', { userId })
      .getOne();
    if (!userToken) {
      // 如果不存在，就插入token
      return this.tokenRepository.save({ userId, token });
    } else {
      // 如果存在，就更新token
      userToken.token = token;
      return this.tokenRepository.save(userToken);
    }
  }
}
